package com.ruoyi.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.domain.UserPages;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mapper.PageMapper;
import com.ruoyi.domain.Page;
import com.ruoyi.service.IPageService;

/**
 * 页面组件Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-06-14
 */
@Service
public class PageServiceImpl implements IPageService 
{
    @Autowired
    private PageMapper pageMapper;

    /**
     * 查询页面组件
     * 
     * @param pageId 页面组件主键
     * @return 页面组件
     */
    @Override
    public Page selectPageByPageId(Long pageId)
    {
        return pageMapper.selectPageByPageId(pageId);
    }

    /**
     * 查询页面组件列表
     * 
     * @param page 页面组件
     * @return 页面组件
     */
    @Override
    public List<Page> selectPageList(Page page)
    {
        return pageMapper.selectPageList(page);
    }

    /**
     * 新增页面组件
     * 
     * @param page 页面组件
     * @return 结果
     */
    @Override
    public int insertPage(Page page)
    {
        page.setStatus(0);
        return pageMapper.insertPage(page);
    }

    /**
     * 修改页面组件
     * 
     * @param page 页面组件
     * @return 结果
     */
    @Override
    public int updatePage(Page page)
    {
        return pageMapper.updatePage(page);
    }

    /**
     * 批量删除页面组件
     * 
     * @param pageIds 需要删除的页面组件主键
     * @return 结果
     */
    @Override
    public int deletePageByPageIds(Long[] pageIds)
    {
        return pageMapper.deletePageByPageIds(pageIds);
    }

    /**
     * 删除页面组件信息
     * 
     * @param pageId 页面组件主键
     * @return 结果
     */
    @Override
    public int deletePageByPageId(Long pageId)
    {
        return pageMapper.deletePageByPageId(pageId);
    }

    @Override
    public List<UserPages> selectUserPages(Page page, Long userId) {
        List<Page> pages = pageMapper.selectPageList(page);
        List<UserPages> list = new ArrayList<UserPages>();

        //集合的深拷贝
        pages.forEach(p->{
            UserPages userPages = new UserPages();
            BeanUtils.copyProperties(p, userPages);
            list.add(userPages);
             int count= pageMapper.getPageIsVisable(userId,userPages.getPageId());
             if(count==0){
                 userPages.setVis(0);
             }else{
                 userPages.setVis(1);
             }
        });
        return list;
    }

    @Override
    public void updateUserPage(Long userId, Long pageId, Integer status) {
         if (status == 1) {
             pageMapper.addUserPage(userId,pageId);
         }else{
             pageMapper.deleteUserPage(userId,pageId);
         }
    }

    @Override
    public List<Page> getUserPageList() {
        Long userId = SecurityUtils.getUserId();
        List<Page> list=pageMapper.getUserPageList(userId);
        return list;
    }
}
